package com.ly.lypopupwindowdemo.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.daimajia.slider.library.Indicators.PagerIndicator;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.DefaultSliderView;
import com.daimajia.slider.library.Tricks.ViewPagerEx;
import com.ly.lypopupwindowdemo.R;

import java.util.HashMap;

import butterknife.BindView;
import butterknife.ButterKnife;
import me.relex.circleindicator.CircleIndicator;

/**
 *
 * https://github.com/daimajia/AndroidImageSlider
 *
 *
 * http://www.jianshu.com/p/e5abbda4a71c
 * <p>
 * <p>
 * 个人认为viewPager使用总结清晰易懂的博文
 * http://blog.csdn.net/u013647382/article/details/42427397
 */
public class ViewPagerStudyActivity extends AppCompatActivity implements BaseSliderView.OnSliderClickListener, ViewPagerEx.OnPageChangeListener {

    /**
     * ViewPager是android扩展包V4包中的类，这个类可以让用户左右切换view
     * ViewPager继承ViewGroup,所以是容器类，可以在其中添加其他的类
     * ViewPager需要一个PagerAdapter适配器，viewpager经常和fragment一起使用
     * 所以专门提供了FragmentPagerAdapter和FragmentStatePagerAdapter类
     */


    /**
     * PagerAdapter是基类的适配器
     * FragementPagerAdapter和FragmentStatePagerAdapter是两个子类
     */

    /**
     * 三个适配器的区别是,基类适配器，通用的适配器
     * 两个子类的适配器是主要适用于Fragment的情况下
     * 两个子类的区别是：
     * FragmentPagerAdapter适用于页面少的情况
     * FragmentStatePagerAdaptr适用于页面多的情况
     */

    /**
     * 从源码中我们可以看出FragmentStatePagerAdapter中fragment实例在destroyItem
     * 的时候被真正释放，所以FragmentStatePagerAdapter省内存。
     * FragmentPagerAdapter中的fragment实例在destroyItem的时候并没有真正释放
     * fragment对象只是detach，所以FragmentPagerAdapter消耗更多的内存，
     * 带来的好处就是效率更高一些。所以得出这样的结论：
     * FragmentPagerAdapter适用于页面比较少的情况，FragmentStatePagerAdapter
     * 适用于页面比较多的情况，因此不同的场合选择合适的适配器才是正确的做法
     */
    private PagerAdapter adapter1;
    private FragmentPagerAdapter adapter2;
    private FragmentStatePagerAdapter adapter3;


    /**
     * mViewPager.setOffscreenPageLimit()//这个方法是用来控制fragment
     * 不重新走生命周期的个数的，打个比方一共4个fragment页面，
     * 如果mViewPager.setOffscreenPageLimit(3)，那么所有的fragment
     * 都只走一次生命周期，如果是mViewPager.setOffscreenPageLimit(2)，
     * 那么其中有一个fragment会在切换的时候重新走一遍生命周期，
     * FragmentStatePagerAdapter和FragmentPagerAdapter都是这样，
     * 但是FragmentPagerAdapter设置setOffscreenPageLimit不影响fragment缓存的个数,
     * 而FragmentStatePagerAdapter缓存的fragment实例个数就是setOffscreenPageLimit设置的值+1。
     * 另外setOffscreenPageLimit的缺省值是1，设置0是无效的会被强制赋值成1。
     */

    /**
     * https://github.com/daimajia/AndroidImageSlider
     *
     * @param savedInstanceState
     */


    @BindView(R.id.slider)
    SliderLayout mSlider;

    //    @BindView(R.id.xuqiu)
    Button xuqiu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager_study);
        ButterKnife.bind(this);


        xuqiu = (Button) findViewById(R.id.xuqiu);
        findViewById(R.id.id_indicator).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startActivity(new Intent(ViewPagerStudyActivity.this,IndicatorActivity.class));
                finish();
            }
        });

        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(ViewPagerStudyActivity.this,ViewPagerTransformerActivity.class));
            }
        });

        HashMap<String, String> url_maps = new HashMap<String, String>();
        url_maps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg");
        url_maps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png");
        url_maps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg");
        url_maps.put("Game of Thrones", "http://images.boomsbeat.com/data/images/full/19640/game-of-thrones-season-4-jpg.jpg");

        HashMap<String, Integer> file_maps = new HashMap<String, Integer>();
        file_maps.put("Hannibal", R.drawable.hannibal);
        file_maps.put("Big Bang Theory", R.drawable.bigbang);
        file_maps.put("House of Cards", R.drawable.house);
        file_maps.put("Game of Thrones", R.drawable.game_of_thrones);

        for (String name : file_maps.keySet()) {

            //TextSliderView
            DefaultSliderView textSliderView = new DefaultSliderView(this);
            // initialize a SliderLayout
            textSliderView
                    .description(name)
                    .image(file_maps.get(name))
                    .setScaleType(BaseSliderView.ScaleType.Fit)
                    .setOnSliderClickListener(this);

            //add your extra information
            textSliderView.bundle(new Bundle());
            textSliderView.getBundle()
                    .putString("extra", name);

            mSlider.addSlider(textSliderView);

        }
        mSlider.setPresetTransformer(SliderLayout.Transformer.Stack);//Accordion

//        mSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
//        mSlider.setCustomAnimation(new DescriptionAnimation());

       // mSlider.setCustomIndicator((PagerIndicator) findViewById(R.id.custom_indicator));

        mSlider.setCustomIndicator((PagerIndicator) findViewById(R.id.custom_indicator));

        // mSlider.setDuration(4000);

        mSlider.stopAutoCycle();

        mSlider.addOnPageChangeListener(this);

        xuqiu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startActivity(new Intent(ViewPagerStudyActivity.this, XuQiuActivity.class));
                finish();
            }
        });

        findViewById(R.id.circle_indicator).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(ViewPagerStudyActivity.this, CircleIndicatorDemo.class));
            }
        });

    }

    @Override
    public void onSliderClick(BaseSliderView slider) {
        Toast.makeText(this, slider.getBundle().get("extra") + "", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    @Override
    protected void onStop() {
        mSlider.stopAutoCycle();
        super.onStop();
    }
}
